AWK এ ফাইল হ্যান্ডলিং একটি গুরুত্বপূর্ণ বৈশিষ্ট্য যা ব্যবহারকারীদের ডেটা প্রসেসিং এবং বিশ্লেষণে সহায়তা করে। AWK ব্যবহার করে আপনি ফাইল থেকে ডেটা পড়তে, প্রক্রিয়া করতে এবং নতুন ফাইলে আউটপুট লিখতে পারেন। AWK এর মাধ্যমে একাধিক ফাইলও প্রক্রিয়া করা যায়।
AWK স্বাভাবিকভাবে ফাইল থেকে ডেটা পড়ে এবং প্রতিটি লাইনকে একটি রেকর্ড হিসেবে বিবেচনা করে। AWK কমান্ডে ফাইলের নাম সরাসরি উল্লেখ করা হয়।
awk '{print $1, $2}' filename.txt
এই কমান্ডটি filename.txt
ফাইলের প্রতিটি লাইনের প্রথম এবং দ্বিতীয় কলাম প্রিন্ট করবে।
AWK একাধিক ফাইল একসাথে প্রক্রিয়া করতে পারে। এতে NR
এবং FNR
ভেরিয়েবল ব্যবহার করে প্রতিটি ফাইলের প্রক্রিয়াকরণ নিরীক্ষণ করা যায়।
NR
: মোট রেকর্ড নম্বর, যা সমস্ত ফাইলের প্রক্রিয়াকৃত লাইনের সংখ্যা গণনা করে।FNR
: বর্তমান ফাইলের প্রক্রিয়াকৃত লাইনের সংখ্যা গণনা করে।awk '{print FILENAME, FNR, $0}' file1.txt file2.txt
এই কমান্ডটি file1.txt
এবং file2.txt
ফাইলের প্রতিটি লাইনের ফাইল নাম, লাইন নম্বর এবং সম্পূর্ণ লাইন প্রিন্ট করবে।
AWK এর মাধ্যমে আউটপুটকে নতুন ফাইলে লেখা যায় >
বা >>
অপারেটর ব্যবহার করে।
>
: নতুন ফাইলে লেখে এবং পূর্ববর্তী ডেটা ওভাররাইট করে।>>
: নতুন ডেটা অ্যাপেন্ড করে, পূর্ববর্তী ডেটা বজায় রাখে।awk '{print $1, $2 > "output.txt"}' filename.txt
এই কমান্ডটি filename.txt
ফাইলের প্রথম এবং দ্বিতীয় কলাম output.txt
ফাইলে লেখে।
awk '{print $1, $2 >> "output.txt"}' filename.txt
এই কমান্ডটি আগের ডেটা সংরক্ষণ করে এবং নতুন ডেটা output.txt
ফাইলে অ্যাপেন্ড করে।
close()
ফাংশনAWK এ একই আউটপুট ফাইল একাধিকবার লেখার পর close()
ফাংশন ব্যবহার করা হয়। এটি ফাইল হ্যান্ডলিংয়ের সময় সমস্যা এড়াতে সাহায্য করে।
awk '{print $1 > "output.txt"; close("output.txt")}' filename.txt
এটি প্রতিটি লাইনের পরে output.txt
ফাইল বন্ধ করে, যা নতুন ডেটা লেখার সময় সমস্যা এড়ায়।
AWK ব্যবহার করে ফাইল থেকে নির্দিষ্ট অংশ পড়া যায় শর্ত ব্যবহার করে। উদাহরণস্বরূপ, যদি কোনো লাইনে নির্দিষ্ট প্যাটার্ন থাকে, তা খুঁজে বের করা যায়।
awk '/pattern/ {print $0}' filename.txt
এই কমান্ডটি filename.txt
ফাইলের মধ্যে pattern
থাকা প্রতিটি লাইন প্রিন্ট করবে।
AWK এ ফাইল হ্যান্ডলিং ব্যবহারকারীদের ফাইল থেকে ডেটা পড়া, প্রক্রিয়া করা এবং আউটপুট নতুন ফাইলে লেখা সহজ করে তোলে। একাধিক ফাইল প্রক্রিয়াকরণ, আউটপুট লেখার অপারেটর, এবং close()
ফাংশন ব্যবহারের মাধ্যমে ডেটা হ্যান্ডলিং আরও কার্যকরী হয়। AWK এর এই ক্ষমতা বড় আকারের ডেটাসেট প্রক্রিয়াকরণের সময় খুবই সহায়ক।
AWK একটি শক্তিশালী টুল যা একই সময়ে একাধিক ফাইল প্রক্রিয়াকরণে সক্ষম। এটি আপনাকে বিভিন্ন ফাইল থেকে ডেটা ফিল্টার করা, বিশ্লেষণ করা এবং আউটপুট তৈরি করতে সহায়তা করে। AWK যখন একাধিক ফাইল নিয়ে কাজ করে, তখন প্রতিটি ফাইলের জন্য ডেটা লাইন বাই লাইন পড়া হয় এবং প্রক্রিয়াকরণ করা হয়।
AWK ব্যবহার করে একাধিক ফাইল একসাথে প্রক্রিয়া করার জন্য, ফাইলের নামগুলি AWK কমান্ডের শেষে একের পর এক তালিকাভুক্ত করা হয়। AWK নিজেই প্রতিটি ফাইল প্রক্রিয়া করে এবং FILENAME
ভেরিয়েবল ব্যবহার করে বর্তমান ফাইলের নাম চিহ্নিত করা যায়।
awk 'pattern { action }' file1.txt file2.txt ...
awk '{ print $1, $2 }' file1.txt file2.txt
এটি file1.txt
এবং file2.txt
থেকে প্রতিটি লাইনের প্রথম এবং দ্বিতীয় ফিল্ড প্রিন্ট করবে।
FILENAME
ভেরিয়েবলের ব্যবহারAWK-এর বিল্ট-ইন ভেরিয়েবল FILENAME
ব্যবহার করে আপনি জানতে পারবেন কোন ফাইল থেকে বর্তমানে ডেটা পড়া হচ্ছে।
awk '{ print FILENAME ": " $0 }' file1.txt file2.txt
এই কমান্ডটি প্রতিটি লাইনের সামনে ফাইলের নামসহ পুরো লাইন প্রিন্ট করবে।
আউটপুট:
file1.txt: Line 1 of file1
file1.txt: Line 2 of file1
file2.txt: Line 1 of file2
file2.txt: Line 2 of file2
AWK-তে FNR
ভেরিয়েবল ব্যবহার করে প্রতিটি ফাইলের লাইন নম্বর ট্র্যাক করা যায়। NR
ভেরিয়েবল পুরো প্রক্রিয়াকরণের জন্য মোট লাইন নম্বর ট্র্যাক করে, কিন্তু FNR
প্রতিটি ফাইলের জন্য পুনরায় শুরু হয়।
awk 'FNR == 1 { print "Processing file:", FILENAME } { print $0 }' file1.txt file2.txt
এই স্ক্রিপ্টটি প্রতিটি নতুন ফাইলের শুরুতে ফাইলের নাম প্রিন্ট করবে এবং তারপরে প্রতিটি লাইন প্রিন্ট করবে।
ধরা যাক, আপনি দুটি ফাইল থেকে দ্বিতীয় কলামের যোগফল বের করতে চান।
awk '{ sum += $2 } END { print "Total sum of second column:", sum }' file1.txt file2.txt
এটি file1.txt
এবং file2.txt
থেকে দ্বিতীয় কলামের সমস্ত মানের যোগফল প্রিন্ট করবে।
AWK-এর if
শর্ত ব্যবহার করে, আপনি নির্দিষ্ট ফাইলের ডেটা ফিল্টার করতে পারেন।
awk 'FILENAME == "file1.txt" && $1 ~ /pattern/ { print $0 }' file1.txt file2.txt
এটি শুধুমাত্র file1.txt
থেকে প্রথম ফিল্ডে "pattern" থাকা লাইনগুলো প্রিন্ট করবে।
AWK ব্যবহার করে একাধিক ফাইল প্রক্রিয়াকরণ একটি অত্যন্ত কার্যকরী পদ্ধতি, যা ডেটা বিশ্লেষণ এবং ফিল্টার করার কাজকে সহজ করে। FILENAME
এবং FNR
এর মতো বিল্ট-ইন ভেরিয়েবল ব্যবহার করে, আপনি একাধিক ফাইল নিয়ে কাজ করার সময় আরও নিয়ন্ত্রণ পেতে পারেন। এই বৈশিষ্ট্যগুলি AWK-কে ডেটা ম্যানিপুলেশনের জন্য একটি শক্তিশালী টুল হিসেবে প্রতিষ্ঠিত করেছে।
AWK ব্যবহার করে ডেটা প্রসেসিংয়ের সময় আমরা আউটপুট অন্য একটি ফাইলে সংরক্ষণ করতে বা ইনপুট এক বা একাধিক ফাইল থেকে নিতে পারি। File Redirection এবং File Input/Output এর মাধ্যমে জটিল ডেটা প্রক্রিয়াকরণ সহজে করা যায়।
AWK এ >
এবং >>
চিহ্ন ব্যবহার করে আউটপুটকে ফাইলে রিডাইরেক্ট করা যায়:
>
: নতুন আউটপুট ফাইল তৈরি করে এবং পুরোনো ডেটা ওভাররাইট করে।>>
: বিদ্যমান ফাইলের শেষে আউটপুট অ্যাপেন্ড করে।awk '{print $1, $2}' input.txt > output.txt
এখানে, input.txt
ফাইলের প্রথম এবং দ্বিতীয় কলাম output.txt
ফাইলে সংরক্ষণ করা হবে। যদি output.txt
আগে থেকে থাকে, তাহলে তার পুরোনো ডেটা ওভাররাইট হবে।
awk '{print $1, $2}' input.txt >> output.txt
এখানে, input.txt
ফাইলের প্রথম এবং দ্বিতীয় কলাম output.txt
ফাইলের শেষে যোগ করা হবে।
AWK ব্যবহার করে এক বা একাধিক ফাইল থেকে ডেটা নেওয়া যায়। একাধিক ফাইলের ক্ষেত্রে AWK প্রতিটি ফাইল আলাদা করে প্রক্রিয়া করে।
awk '{print $1, $2}' file1.txt file2.txt
এখানে, file1.txt
এবং file2.txt
উভয় ফাইলের প্রথম এবং দ্বিতীয় কলাম প্রিন্ট হবে।
AWK এর বিল্ট-ইন ভেরিয়েবল FILENAME
ব্যবহার করে ইনপুট ফাইলের নামসহ আউটপুট প্রিন্ট করা যায়:
awk '{print FILENAME ": " $0}' file1.txt file2.txt
এখানে, প্রতিটি লাইন তার ফাইলের নামসহ প্রিন্ট হবে।
AWK স্ক্রিপ্টের মধ্যে ফাইল ইনপুট/আউটপুটও করা যায়।
awk '{
if ($3 > 50) {
print $0 > "high_scores.txt" # তৃতীয় কলামের মান ৫০ এর বেশি হলে এই ফাইলে সংরক্ষণ
} else {
print $0 > "low_scores.txt" # অন্যথায় এই ফাইলে সংরক্ষণ
}
}' scores.txt
এখানে, scores.txt
ফাইলের তৃতীয় কলাম চেক করা হচ্ছে। যদি মান ৫০ এর বেশি হয়, তবে সেই লাইন high_scores.txt
তে সংরক্ষণ করা হবে, আর যদি কম হয় তবে low_scores.txt
তে সংরক্ষণ করা হবে।
AWK এ একটি ফাইলের আউটপুট সম্পন্ন হলে তা ক্লোজ করা জরুরি হতে পারে। ক্লোজ করার জন্য close()
ফাংশন ব্যবহার করা হয়:
awk '{
print $0 > "output.txt"
close("output.txt") # প্রতিটি আউটপুটের পরে ফাইল ক্লোজ করা হচ্ছে
}' input.txt
এটি নিশ্চিত করে যে, পরবর্তী আউটপুট একই ফাইলে পুনরায় লেখা যাবে এবং ডেটা সঠিকভাবে সংরক্ষিত হবে।
AWK এ File Redirection এবং File Input/Output ব্যবহার করে ডেটা প্রসেসিং এবং সংরক্ষণের কাজ খুবই সহজ এবং কার্যকরী। আউটপুট রিডাইরেকশন ব্যবহার করে আউটপুট ফাইলে সংরক্ষণ করা এবং এক বা একাধিক ফাইল থেকে ইনপুট নিয়ে ডেটা বিশ্লেষণ করা সম্ভব। AWK এর মাধ্যমে এই ক্ষমতা ব্যবহার করে আপনি ডেটা প্রসেসিং কাজকে আরও সহজ এবং কার্যকর করতে পারেন।
getline
ফাংশন এবং এর প্রয়োগAWK তে getline
ফাংশন একটি শক্তিশালী টুল, যা ফাইল থেকে বা স্ট্যান্ডার্ড ইনপুট থেকে সরাসরি একটি লাইন পড়তে ব্যবহৃত হয়। এটি ব্যবহার করে ইনপুট প্রসেসিং আরও বেশি কাস্টমাইজ করা যায়। AWK এর সাধারণ প্রক্রিয়াকরণ মডেল অনুযায়ী প্রতিটি রেকর্ড স্বয়ংক্রিয়ভাবে প্রসেস করা হলেও, getline
ব্যবহারকারীদের ম্যানুয়ালি একটি লাইন পড়ার ক্ষমতা দেয়।
getline
ফাংশনের ব্যবহারgetline
ফাংশন বিভিন্ন উপায়ে ব্যবহার করা যায়:
একটি লাইন পড়া এবং প্রসেস করা:
awk '{
line = $0 # বর্তমান লাইনের জন্য
print line # প্রিন্ট করা
getline # পরবর্তী লাইন পড়া
print "Next Line:", $0
}' data.txt
এই উদাহরণে, getline
বর্তমান লাইনের পরবর্তী লাইন পড়ে এবং সেটিকে প্রিন্ট করে।
একটি নির্দিষ্ট ফাইল থেকে লাইন পড়া:
awk 'BEGIN {
while ((getline line < "input.txt") > 0) {
print line
}
}'
এখানে, input.txt
ফাইল থেকে এক এক করে প্রতিটি লাইন পড়ে এবং প্রিন্ট করা হয়।
ভেরিয়েবলে লাইন পড়া এবং সংরক্ষণ করা:
awk '{
count += 1
if (getline line < "additional.txt") > 0) {
print "Line from data.txt:", $0
print "Line from additional.txt:", line
}
}' data.txt
এই উদাহরণে, data.txt
ফাইল থেকে বর্তমান লাইন পড়ার পর additional.txt
ফাইল থেকে একটি লাইন পড়া হয় এবং দুটোই প্রিন্ট করা হয়।
getline
ফাংশনের রিটার্ন ভ্যালুgetline
সফলভাবে একটি লাইন পড়ে।awk 'BEGIN {
if ((getline < "nonexistent.txt") < 0) {
print "Error reading file!"
}
}'
getline
এর ব্যবহারিক প্রয়োগএকাধিক ইনপুট ফাইল পড়া:
awk '{
print "From main input:", $0
if (getline line < "secondary.txt") > 0) {
print "From secondary file:", line
}
}' primary.txt
এখানে, primary.txt
থেকে একটি লাইন পড়ার পর secondary.txt
থেকে একটি লাইন পড়া হয়।
শর্তাধীন লাইনে যাওয়া:
awk '{
if ($1 == "START") {
getline # "START" লাইনের পরের লাইন সরাসরি পড়ে
print "Next line after START:", $0
}
}' input.txt
এখানে, যদি প্রথম ফিল্ডটি "START" হয়, তবে getline
ব্যবহার করে পরবর্তী লাইন পড়া এবং প্রিন্ট করা হয়।
getline
ব্যবহার করার সময় সতর্কতা অবলম্বন করা উচিত, কারণ এটি AWK এর স্বাভাবিক ফিল্ড এবং রেকর্ড প্রসেসিং লজিক পরিবর্তন করতে পারে।getline
ফাংশন যদি ভুলভাবে ব্যবহৃত হয়, তবে এটি প্রোগ্রামকে জটিল করে তুলতে পারে এবং অনাকাঙ্ক্ষিত আচরণ সৃষ্টি করতে পারে।AWK এর getline
ফাংশন ব্যবহার করে ইনপুট পড়ার প্রক্রিয়াকে আরও নমনীয় ও কাস্টমাইজ করা যায়। এটি ব্যবহারকারীদের নির্দিষ্ট শর্তে ইনপুট পড়া, ফাইল থেকে একাধিক লাইন পড়া, এবং ম্যানুয়ালি ইনপুট হ্যান্ডল করার ক্ষমতা দেয়। তবে getline
ব্যবহারের সময় সতর্ক থাকা গুরুত্বপূর্ণ, কারণ এটি AWK এর স্বাভাবিক প্রক্রিয়াকরণ লজিক পরিবর্তন করতে পারে।
AWK একটি শক্তিশালী টুল যা ফাইল থেকে ডেটা বের করা (Data Extraction) এবং ফাইলে ডেটা লিখার (Data Writing) কাজকে সহজ এবং কার্যকর করে। এটি টেক্সট ফাইলের লাইন এবং ফিল্ড বিশ্লেষণ করে নির্দিষ্ট ডেটা প্রক্রিয়া করতে পারে। নিচে AWK ব্যবহার করে কিভাবে ফাইল থেকে ডেটা বের করা এবং ফাইলে ডেটা লেখা যায় তার বিস্তারিত উদাহরণ দেওয়া হলো।
AWK ব্যবহার করে ফাইল থেকে নির্দিষ্ট ফিল্ড বা প্যাটার্ন অনুযায়ী ডেটা বের করা যায়।
awk '{print $1, $3}' input.txt
এখানে, input.txt
ফাইলের প্রথম এবং তৃতীয় কলাম প্রিন্ট হবে।
awk '/error/ {print $0}' log.txt
এখানে, log.txt
ফাইলের যেসব লাইনে "error" শব্দ রয়েছে, সেগুলি প্রিন্ট হবে।
AWK ব্যবহার করে ডেটা প্রসেস করে তা নতুন ফাইলে বা বিদ্যমান ফাইলে লেখা সম্ভব।
awk '{print $1, $3}' input.txt > output.txt
এখানে, input.txt
ফাইলের প্রথম এবং তৃতীয় কলাম output.txt
ফাইলে লেখা হবে। >
অপারেটরটি ব্যবহার করে বিদ্যমান ফাইল ওভাররাইট করা হয়।
awk '/success/ {print $0}' log.txt >> result.txt
এখানে, log.txt
ফাইলের যেসব লাইনে "success" শব্দ রয়েছে, সেগুলি result.txt
ফাইলে অ্যাপেন্ড করা হবে। >>
অপারেটরটি বিদ্যমান ফাইলে ডেটা যোগ করে।
AWK এ BEGIN
এবং END
ব্লক ব্যবহার করে ফাইল লেখার আগে বা পরে নির্দিষ্ট কমান্ড চালানো যায়।
awk 'BEGIN {print "Processing starts"} {print $1, $2} END {print "Processing ends"}' input.txt > output.txt
এখানে, input.txt
ফাইলের প্রথম এবং দ্বিতীয় কলাম output.txt
ফাইলে লেখা হবে এবং ফাইলের শুরুতে "Processing starts" এবং শেষে "Processing ends" লেখা হবে।
AWK এর ক্ষমতা Shell Script এর মধ্যে সংযোজন করা হলে ডেটা প্রসেসিং আরও উন্নত হয়।
run_script.sh:
#!/bin/bash
# ফাইল থেকে ডেটা পড়ে নতুন ফাইলে লেখা
awk '{if ($2 > 50) print $0}' data.txt > filtered_data.txt
এখানে, data.txt
ফাইলের যেসব লাইনে দ্বিতীয় কলামের মান ৫০ এর বেশি, সেগুলি filtered_data.txt
ফাইলে লেখা হবে।
AWK ব্যবহার করে ফাইল থেকে ডেটা বের করা এবং ফাইলে ডেটা লেখার কাজ অত্যন্ত কার্যকরভাবে করা যায়। এটি সহজ সিনট্যাক্স এবং শক্তিশালী ফিচারের মাধ্যমে ডেটা প্রসেসিং এবং বিশ্লেষণের কাজকে দ্রুত এবং সুশৃঙ্খল করে তোলে। >
এবং >>
অপারেটর ব্যবহার করে ডেটা নতুন ফাইলে লেখা বা বিদ্যমান ফাইলে অ্যাপেন্ড করা যায়। Shell Script এর সাথে AWK এর সমন্বয় ডেটা ম্যানিপুলেশনের শক্তিশালী সমাধান প্রদান করে।
common.read_more